package QC.MessageBox.beans.rcform;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

/**
 * Created by Andaren on 2017/4/13.
 * Used for: 单聊消息消息体表单
 */
public class RCSingleForm {

    private String fromUserId;	        // 发送人用户 Id。（必传）

    private String toUserId;	        // 接收用户 Id，可以实现向多人发送消息，每次上限为 1000 人。（必传）

    private String objectName;	        // 消息类型，参考融云消息类型表.消息标志；可自定义消息类型，长度不超过 32 个字符，
                                            // 您在自定义消息时需要注意，不要以 "RC:" 开头，以避免与融云系统内置消息的 ObjectName 重名。（必传）

    private String content;	            // 发送消息内容，参考融云消息类型表.示例说明；如果 objectName 为自定义消息类型，该参数可自定义格式。（必传）

    private String pushContent;	        // 定义显示的 Push 内容，如果 objectName 为融云内置消息类型时，则发送后用户一定会收到 Push 信息。
                                            // 如果为自定义消息，则 pushContent 为自定义消息显示的 Push 内容，如果不传则用户不会收到 Push 通知。(可选)

    private String pushData;	        // 针对 iOS 平台为 Push 通知时附加到 payload 中，Android 客户端收到推送消息时对应字段名为 pushData。(可选)

    private String count;	            // 针对 iOS 平台，Push 时用来控制未读消息显示数，只有在 toUserId 为一个用户 Id 的时候有效。(可选)

    private Integer verifyBlacklist;	// 是否过滤发送人黑名单列表，0 表示为不过滤、 1 表示为过滤，默认为 0 不过滤。(可选)

    private Integer isPersisted;	    // 当前版本有新的自定义消息，而老版本没有该自定义消息时，老版本客户端收到消息后是否进行存储，
                                            // 0 表示为不存储、 1 表示为存储，默认为 1 存储消息。(可选)

    private Integer isCounted;	        // 当前版本有新的自定义消息，而老版本没有该自定义消息时，老版本客户端收到消息后是否进行未读消息计数，
                                            // 0 表示为不计数、 1 表示为计数，默认为 1 计数，未读消息数增加 1。(可选)

    private Integer isIncludeSender;	// 发送用户自已是否接收消息，0 表示为不接收，1 表示为接收，默认为 0 不接收，只有在 toUserId 为一个用户 Id 的时候有效。（可选）

    public RCSingleForm () {}

    public String formatBody() {
        StringBuilder sb = new StringBuilder();
        try {
            sb.append("fromUserId=").append(URLEncoder.encode(fromUserId.toString(), "UTF8"))
                    .append("&toUserId=").append(URLEncoder.encode(toUserId.toString(), "UTF8"))
                    .append("&objectName=").append(URLEncoder.encode(objectName.toString(), "UTF8"))
                    .append("&content=").append(URLEncoder.encode(content.toString(), "UTF8"));
        } catch (UnsupportedEncodingException en) {
            en.printStackTrace();
        }
        return sb.toString();
    }

    public String getFromUserId() {
        return fromUserId;
    }

    public RCSingleForm setFromUserId(String fromUserId) {
        this.fromUserId = fromUserId;
        return this;
    }

    public String getToUserId() {
        return toUserId;
    }

    public RCSingleForm setToUserId(String toUserId) {
        this.toUserId = toUserId;
        return this;
    }

    public String getObjectName() {
        return objectName;
    }

    public RCSingleForm setObjectName(String objectName) {
        this.objectName = objectName;
        return this;
    }

    public String getContent() {
        return content;
    }

    public RCSingleForm setContent(String content) {
        this.content = content;
        return this;
    }

    public String getPushContent() {
        return pushContent;
    }

    public RCSingleForm setPushContent(String pushContent) {
        this.pushContent = pushContent;
        return this;
    }

    public String getPushData() {
        return pushData;
    }

    public RCSingleForm setPushData(String pushData) {
        this.pushData = pushData;
        return this;
    }

    public String getCount() {
        return count;
    }

    public RCSingleForm setCount(String count) {
        this.count = count;
        return this;
    }

    public Integer getVerifyBlacklist() {
        return verifyBlacklist;
    }

    public RCSingleForm setVerifyBlacklist(Integer verifyBlacklist) {
        this.verifyBlacklist = verifyBlacklist;
        return this;
    }

    public Integer getIsPersisted() {
        return isPersisted;
    }

    public RCSingleForm setIsPersisted(Integer isPersisted) {
        this.isPersisted = isPersisted;
        return this;
    }

    public Integer getIsCounted() {
        return isCounted;
    }

    public RCSingleForm setIsCounted(Integer isCounted) {
        this.isCounted = isCounted;
        return this;
    }

    public Integer getIsIncludeSender() {
        return isIncludeSender;
    }

    public RCSingleForm setIsIncludeSender(Integer isIncludeSender) {
        this.isIncludeSender = isIncludeSender;
        return this;
    }
}
